package fisio.control;

import java.io.IOException;
import java.util.Date;
import java.util.Vector;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;

import fisio.global.Const;
import fisio.global.Util;
import fisio.model.Avaliacao;
import fisio.model.Endereco;
import fisio.model.Fisioterapeuta;
import fisio.model.Foto;
import fisio.model.Paciente;
import fisio.service.ServicoPaciente;

public class PacienteServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
	throws ServletException, IOException {	

		String op = request.getParameter("op");
		
		if(op != null) {
			
			if(op.equals("listar")) {
				
				Vector<Paciente> temp = ServicoPaciente.getPacientes();
				JSONArray array = new JSONArray();
				
				for(int i = 0; i < temp.size(); i++)
					array.add(temp.get(i).toJSON());
				
				request.getSession().setAttribute("tabAtiva", "#tabPacientes");
				response.setContentType("application/json");
				response.getWriter().print(array);

			} else if(op.equals("exibir")){

				int id = Integer.parseInt(request.getParameter("id"));
				Paciente paciente = ServicoPaciente.getPaciente(new Paciente(id));
				if(paciente != null){
					request.setAttribute("paciente", paciente);
					request.getRequestDispatcher(Const.JSP_VER_PACIENTE).forward(request, response);
				}

			} else if(op.equals("editar")) {

				int id = Integer.parseInt(request.getParameter("id"));
				Paciente paciente = ServicoPaciente.getPaciente(new Paciente(id));
				if(paciente != null){
					request.setAttribute("paciente", paciente);
					request.getRequestDispatcher(Const.JSP_CAD_PACIENTE).forward(request, response);
				}

			} else
				response.sendRedirect(Const.CONTEXT);
			
		} else
			response.sendRedirect(Const.CONTEXT);
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
	throws ServletException, IOException {
		
		String op = request.getParameter("op");
		
		if(op != null) {
			
			String id = request.getParameter("id");
			
			String nome = request.getParameter("nome");
			String sexo = request.getParameter("sexo");
			String data_nasc = request.getParameter("data_nasc");
			String profissao = request.getParameter("profissao");
			
			String fone1 = request.getParameter("fone1");
			String fone2 = request.getParameter("fone2");
			String email = request.getParameter("email");

			String logradouro = request.getParameter("logradouro");
			String numero = request.getParameter("numero");
			String complemento = request.getParameter("complemento");
			String bairro = request.getParameter("bairro");
			String cidade = request.getParameter("cidade");
			String cep = request.getParameter("cep");
			
			String login = request.getParameter("login");
			String senha = request.getParameter("senha");
			
			String altura = request.getParameter("altura");
			String peso = request.getParameter("peso");

			String fotoStr = request.getParameter("foto");
			String obs = request.getParameter("obs");
			
			if(op.equals("cadastrar")){
				
				numero += (numero.length() > 0 ? "" : "0");
				altura += (altura.length() > 0 ? "" : "0");
				peso += (peso.length() > 0 ? "" : "0");

				Endereco endereco = new Endereco(
											logradouro,
											Integer.parseInt(numero),
											complemento,
											bairro,
											cidade,
											cep
										);
				Vector<Avaliacao> avaliacoes = new Vector<Avaliacao>();
				avaliacoes.add(new Avaliacao(
										new Date(System.currentTimeMillis()),
										Integer.parseInt(altura),
										Integer.parseInt(peso)
									)
								);
				ServicoPaciente.insertPaciente(
										(Fisioterapeuta)request.getSession().getAttribute("usuario"),
										new Paciente(
												nome,
												Boolean.parseBoolean(sexo),
												Util.convertStringToDateUtil(data_nasc),
												profissao,
												fone1,
												fone2,
												email,
												login,
												senha,
												obs,
												null,
												endereco,
												avaliacoes
										)
									);
				response.sendRedirect(Const.PAGE_HOME_LOGADO);

			} else if(op.equals("deletar")) {

				ServicoPaciente.deletePaciente(new Paciente(Integer.parseInt(id)));

			} else if(op.equals("editar")){
				
				numero += (numero.length() > 0 ? "" : "0");
				altura += (altura.length() > 0 ? "" : "0");
				peso += (peso.length() > 0 ? "" : "0");

				Endereco endereco = new Endereco(
						logradouro,
						Integer.parseInt(numero),
						complemento,
						bairro,
						cidade,
						cep
					);
				Vector<Avaliacao> avaliacoes = new Vector<Avaliacao>();
				avaliacoes.add(new Avaliacao(
						new Date(System.currentTimeMillis()),
						Integer.parseInt(altura),
						Integer.parseInt(peso)
					)
				);
				ServicoPaciente.editPaciente(
						new Paciente(
								Integer.parseInt(id),
								nome,
								Boolean.parseBoolean(sexo),
								Util.convertStringToDateUtil(data_nasc),
								profissao,
								fone1,
								fone2,
								email,
								login,
								senha,
								obs,
								null,
								endereco,
								avaliacoes
						)
					);

				response.sendRedirect(Const.PAGE_HOME_LOGADO);

			} else

				response.sendRedirect(Const.CONTEXT);
			
		} else {

			response.sendRedirect(Const.CONTEXT);
	
		}
	}
}